from django.shortcuts import render
from rest_framework import viewsets

from iClouds.Permissions import AllPermissions, MyPermissions
from iClouds.Authentication import MyJWTAuthentication
from iClouds.apidev import filter_views
from mysqldb import redis as REDIS

from .serializers import *
from mysqldb.serializers import ListDjangoFilterBackend

# 创建日志对象
import logging

logger = logging.getLogger("lizhu")

# Create your views here.
class alert(viewsets.ModelViewSet):
    __title__ = "接收利住消息"
    __doc__ = """
    create:\n
    <h4>接收通知消息</h4>\n
        成功返回: SUCCESS
        失败返回: FAIL
    `内置系统接口，禁止用户调用。`
    """

    http_method_names = ["post"]
    authentication_classes = []
    permission_classes = [AllPermissions]
    serializer_class = RepostSerializer
    queryset = None

    def create(self, request, *args, **kwargs):
        x = request.data
        # 写入日志
        logger.info(x)
        try:
            act = x.get("type")
            obj = x.get("data")
            if obj:
                hid = obj[0].get("registMsg").get("hid")
                # 写入缓存
                REDIS.redis_putlist("lizhu", hid, x)
                return HttpResponse("success")
            else:
                return HttpResponse("FAIL")
        except BaseException as err:
            return HttpResponse("FAIL")


class LizhuListenRecv(viewsets.ModelViewSet):
    __title__ = "提取利住消息"
    __group__ = "利住模块"
    __doc__ = f"""
    create:\n
    <h4>提取利住推送消息</h4>\n
        type	是	string	推送类型 1-入住 2-续住 3-退房 4-取消入住 5-挂账未结
        data	是	array	登记单信息数组
        data.registMsg	是	object	无
        data.registMsg.createTime	是	string	无
        data.registMsg.createTimeStr	是	string	无
        data.registMsg.createUserId	是	string	无
        data.registMsg.createUserName	是	object	无
        data.registMsg.updateTime	是	string	无
        data.registMsg.updateUserId	是	string	无
        data.registMsg.updateUserName	是	object	无
        data.registMsg.updateCalssId	是	object	无
        data.registMsg.registId	是	string	登记单ID
        data.registMsg.hid	是	string	酒店编号
        data.registMsg.hotelGroupId	是	string	集团编号
        data.registMsg.bookingOrderId	是	string	无
        data.registMsg.otherPmsRegistId	是	string	无
        data.registMsg.otherPmsOrderId	是	string	无
        data.registMsg.roomNumId	是	string	无
        data.registMsg.roomNum	是	string	房间号
        data.registMsg.sn	是	string	无
        data.registMsg.roomTypeId	是	string	房型ID
        data.registMsg.companyId	是	string	协议单位 ID
        data.registMsg.compayName	是	string	协议单位名称
        data.registMsg.companyAccountId	是	string	无
        data.registMsg.roomRateCodeId	是	string	无
        data.registMsg.roomRateCodeName	是	string	无
        data.registMsg.dayCount	是	string	无
        data.registMsg.checkinTime	是	string	入住时间
        data.registMsg.checkoutTime	是	string	离店时间
        data.registMsg.checkouTimeLong	是	string	无
        data.registMsg.settleAccountTime	是	object	无
        data.registMsg.remark	是	string	无
        data.registMsg.personCount	是	string	无
        data.registMsg.autoCheckout	是	string	无
        data.registMsg.teamCodeId	是	string	无
        data.registMsg.teamCodeName	是	string	无
        data.registMsg.checkinType	是	string	无
        data.registMsg.checkinMode	是	string	无
        data.registMsg.resourceId	是	string	无
        data.registMsg.resourceName	是	string	无
        data.registMsg.state	是	string	无
        data.registMsg.breakfastNum	是	string	无
        data.registMsg.saleId	是	string	无
        data.registMsg.memberId	是	string	无
        data.registMsg.memberCard	是	string	无
        data.registMsg.isSecurity	是	string	无
        data.registMsg.morningCallTime	是	string	无
        data.registMsg.makeInvoiced	是	string	无
        data.registMsg.checkoutBusinessDay	是	string	无
        data.registMsg.checkoutClassId	是	string	无
        data.registMsg.checkoutOperator	是	string	无
        data.registMsg.checkoutOperatorId	是	string	无
        data.registMsg.thirdPmsRegistId	是	string	无
        data.registMsg.registYear	是	string	无
        data.registMsg.registYearMonth	是	string	无
        data.registMsg.businessDay	是	string	无
        data.registMsg.classId	是	string	无
        data.registMsg.roomTypeName	是	string	无
        data.registMsg.isCreateNightCost	是	string	无
        data.registMsg.registGroupId	是	string	无
        data.registMsg.isMainRoom	是	string	无
        data.registMsg.orderStatus	是	string	无
        data.registMsg.sumPay	是	string	无
        data.registMsg.sumSale	是	string	无
        data.registMsg.sessionToken	是	object	无
        data.registMsg.macRegist	是	string	无
        data.registMsg.macContinue	是	string	无
        data.registMsg.macCheckout	是	string	无
        data.registMsg.roomAuxiliaryRecord	是	string	无
        data.registMsg.peopleName	是	object	无
        data.registMsg.peoples	是	object	无
        data.personMsg	是	array	无
        data.personMsg.registPersonId	是	string	无
        data.personMsg.personId	是	object	无
        data.personMsg.otherPmsPersonId	是	object	无
        data.personMsg.registId	是	string	无
        data.personMsg.idCode	是	string	无
        data.personMsg.birthday	是	string	无
        data.personMsg.nation	是	object	无
        data.personMsg.address	是	string	无
        data.personMsg.personName	是	string	无
        data.personMsg.birthYear	是	string	无
        data.personMsg.personNameEn	是	object	无
        data.personMsg.idType	是	string	无
        data.personMsg.phone	是	string	无
        data.personMsg.isOther	是	string	无
        data.personMsg.hotelGroupId	是	string	无
        data.personMsg.startTime	是	string	无
        data.personMsg.hid	是	string	无
        data.personMsg.sex	是	string	无
        data.personMsg.floor	是	object	无
        data.personMsg.bookingOrderId	是	object	无
        data.personMsg.idImage	是	object	无
        data.personMsg.idImageFaceToken	是	object	无
        data.personMsg.cameraImage	是	object	无
        data.personMsg.cameraImageFaceToken	是	object	无
        data.personMsg.confidence	是	object	无
        data.personMsg.faceResult	是	object	无
        data.personMsg.authenticateTime	是	string	无
        data.personMsg.guestId	是	string	无
        data.personMsg.guestNo	是	string	无
        data.personMsg.guestType	是	object	无
        data.personMsg.classId	是	object	无
        data.personMsg.updateUserId	是	string	无
        data.personMsg.updateUserName	是	string	无
        data.personMsg.roomNumId	是	string	无
        data.personMsg.roomNum	是	string	无
        data.personMsg.teamCodeId	是	string	无
        data.personMsg.bookingOrderRoomNumId	是	object	无
        data.personMsg.carNo	是	object	无
        data.personMsg.love	是	object	无
        data.personMsg.email	是	object	无
        data.personMsg.city	是	object	无
        data.personMsg.area	是	object	无
        data.personMsg.provice	是	object	无
        data.personMsg.registState	是	string	无
    """
    http_method_names = ["post"]
    authentication_classes = [MyJWTAuthentication]
    permission_classes = [AllPermissions]
    serializer_class = AlertSerializer
    queryset = None

    def create(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        hid = serializer.data.get("hid")
        # 读取缓存
        obj = REDIS.redis_haslist("lizhu", hid)
        if obj:
            return Response({"results": eval(obj)})
        else:
            return Response({"results": None})


# 检查视图
filter_views(globals())
